/** 分享类型 */
export enum EShareType {
  BET_DETAIL = 'BetDetail',
}

/** 分享类型对应的工具方法 */
export const shareTypes = {
  ...createShareType(
    EShareType.BET_DETAIL,
    {} as { ic: string; orderNo: string; gameCode: string },
  ),
} satisfies Record<EShareType, unknown>;

/**
 * 创建一个分享类型
 * @param shareType 分享类型
 * @param paramType 分享类型对应的参数的TS类型
 */
function createShareType<ST>(shareType: EShareType, paramType: ST) {
  return {
    [shareType]: {
      type: paramType,
      build(param: ST) {
        return { ...param, shareType };
      },
      assert(param: any): param is ST {
        return param?.shareType === shareType;
      },
    },
  };
}

export function openTwitterShare(params: Record<string, any>) {
  const url = new URL('https://twitter.com/intent/tweet');

  url.searchParams.set('hashtags', 'g9,crypto');
  Object.keys(params).forEach(k => url.searchParams.set(k, params[k]));

  // 在iOS上，如果url中有空格会被转义成+号（不影响正常的+号），所以需要替换成%20
  window.open(url.toString().replace(/\+/g, '%20'));
}

export function openTelegramShare(params: Record<string, any>) {
  const url = new URL('https://t.me/share/url');

  Object.keys(params).forEach(k => url.searchParams.set(k, params[k]));

  // 在iOS上，如果url中有空格会被转义成+号（不影响正常的+号），所以需要替换成%20
  window.open(url.toString().replace(/\+/g, '%20'));
}
